# 输入字符的处理加密
import hashlib

"""
letter模块:
    1. 接收字符，将非英文字符剔除
"""


# 定义函数
def letter(inter_str):
    # 定义变量
    inter_str_new = ""
    # 循环遍历字符
    for i in inter_str:
        # 判断字符是否为英文字符
        if i.isalpha():
            # 将英文字符添加到新字符串中
            inter_str_new += i
    # 返回剔除非英文字符后的字符串
    return inter_str_new


"""
reverse模块:
    1. 将全英文字符反转(循环算法实现)
"""


# 英文字符反转
def reverse(inter_str):
    """
    将全英文字符反转(循环算法实现)
    """
    inter_str_new = ""
    for i in range(len(inter_str) - 1, -1, -1):
        inter_str_new += inter_str[i]
    return inter_str_new


"""
encode模块:通过凯撒密码算法加密后输出
    1. 将反转后的字符
"""


# 加密函数
def encode(inter_str, shift):
    """
    通过凯撒密码算法加密后输出
    """
    result = ""
    for char in inter_str:
        if char.isalpha():
            start = ord("a") if char.islower() else ord("A")
            shifted_char = chr((ord(char) - start + shift) % 26 + start)
            result += shifted_char
        else:
            result += char
    return result


"""
md5模块:通过MD5算法加密后输出
    1. 将反转后的字符
"""


def md5_encrypt(inter_str):
    """
    通过MD5算法加密后输出
    """
    md5_hash = hashlib.md5(inter_str.encode("utf-8")).hexdigest()
    return md5_hash


"""
主模块：
    1. 用户输入字符
    2. 字符长度验证:chanchan长度:0~255
"""

# 用户输入字符
inter_str = input("请输入字符：")

# 字符长度验证：chanchan长度：0~255
inter_len = len(inter_str)
if 0 < inter_len <= 255:
    # 字符长度验证通过，调用letter模块
    engCode = letter(inter_str)
    # 调用reverse模块
    reversed_str = reverse(engCode)
    # 反转后的字符
    print("反转后的字符：", reversed_str)
    # 调用encode模块
    encoded_str = encode(reversed_str, 3)
    print("凯撒加密后的字符:", encoded_str)
    # 调用md5模块
    md5_str = md5_encrypt(reversed_str)
    print("MD5加密后的字符:", md5_str)
else:
    # 字符长度验证不通过，提示用户
    print("字符长度不合法，请重新输入")
